/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.aspas.beans;

import br.com.aspas.modelo.CursosEvento;
import br.com.aspas.modelo.Cursos;
import br.com.aspas.modelo.CursosPessoaFisica;
import br.com.aspas.modelo.Etiqueta;
import br.com.aspas.modelo.Evento;
import br.com.aspas.modelo.PessoaFisica;
import br.com.aspas.modelo.UsuarioImpressora;
import br.com.aspas.persistencia.CursoDao;
import br.com.aspas.persistencia.CursosPessoaFisicaDao;
import br.com.aspas.persistencia.EtiquetaDao;
import br.com.aspas.persistencia.PessoaFisicaDao;
import br.com.aspas.persistencia.PessoaFisicaJuridicaEventoDao;
import br.com.aspas.persistencia.UsuarioImpressoraDao;
import br.com.aspas.util.Imprimir;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

/**
 *
 * @author gimmli
 */
public class CursoBean {

    private Cursos cursos;
    private CursoDao cursoDao;
    private CursosPessoaFisica cursosPessoaFisica;
    private CursosPessoaFisicaDao cursosPessoaFisicaDao;
    private UsuarioImpressoraDao usuarioImpressoraDao;
    private PessoaFisicaDao pessoaFisicaDao;
    private PessoaFisicaJuridicaEventoDao pessoaFisicaJuridicaEventoDao;
    private List<SelectItem> listarCursosI;
    private List<SelectItem> listarCursosII;
    private List<CursosPessoaFisica> listaCursoPessoaFisicaI;
    private List<CursosPessoaFisica> listaCursoPessoaFisicaII;
    private String[] listaStringI;
    private String[] listaStringII;
    private Integer codigoPessoaFisica;
    private PessoaFisica pessoaFisica;
    private EtiquetaDao etiquetaDao;
    private List<CursosEvento> cursosEventoList;
    private CursosEvento cursosEvento;

    public CursoBean() {
        cursosEvento = new CursosEvento();
        cursos = new Cursos();
        pessoaFisica = new PessoaFisica();
        cursoDao = new CursoDao();
        cursosPessoaFisicaDao = new CursosPessoaFisicaDao();
        pessoaFisicaJuridicaEventoDao = new PessoaFisicaJuridicaEventoDao();
        usuarioImpressoraDao = new UsuarioImpressoraDao();
        pessoaFisicaDao = new PessoaFisicaDao();
        listarCursosI = new ArrayList<SelectItem>();
        listarCursosII = new ArrayList<SelectItem>();
        listaCursoPessoaFisicaI = new ArrayList<CursosPessoaFisica>();
        listaCursoPessoaFisicaII = new ArrayList<CursosPessoaFisica>();
        etiquetaDao = new EtiquetaDao();


    }

    public Cursos getCursos() {
        return cursos;
    }

    public void setCursos(Cursos cursos) {
        this.cursos = cursos;
    }

    public String[] getListaStringI() {

        if (listaStringI != null) {
            for (int i = 0; i < listaStringI.length; i++) {
                String token = listaStringI[i];
            }
        }


        return listaStringI;
    }

    public void setListaStringI(String[] listaStringI) {
        this.listaStringI = listaStringI;
    }

    public String[] getListaStringII() {

        return listaStringII;
    }

    public void setListaStringII(String[] listaStringII) {
        this.listaStringII = listaStringII;
    }

    public CursosPessoaFisica getCursosPessoaFisica() {
        return cursosPessoaFisica;
    }

    public void setCursosPessoaFisica(CursosPessoaFisica cursosPessoaFisica) {
        this.cursosPessoaFisica = cursosPessoaFisica;
    }

    public Integer getCodigoPessoaFisica() {
        return codigoPessoaFisica;
    }

    public void setCodigoPessoaFisica(Integer codigoPessoaFisica) {
        this.codigoPessoaFisica = codigoPessoaFisica;
    }

    public List<SelectItem> getListarCursosI() {
        Login login = new Login();
        login = (Login) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("Login");
        Evento evento = login.getUsuarioEventoPerfil().getEvento();

        listarCursosI = new ArrayList<SelectItem>();
        SimpleDateFormat formatI = new SimpleDateFormat("dd/MM/yyyy");
        String dataI = "12/10/2010";
        Date dataCursoI = null;
        try {
            dataCursoI = formatI.parse(dataI);
        } catch (Exception e) {
            e.printStackTrace();
        }
        List<CursosEvento> lista = cursoDao.findALLDataCurso(dataCursoI, evento);

        for (Iterator it = lista.iterator(); it.hasNext();) {
            CursosEvento cursosEvento = (CursosEvento) it.next();
            SelectItem item = new SelectItem();
            if (cursosPessoaFisicaDao.qtdPessoaCurso(cursosEvento.getCursos().getCodigo(), dataCursoI, evento) >= cursosEvento.getCursos().getNumeroVagas()) {
                item.setDisabled(true);
                item.setLabel(cursosEvento.getCursos().getNome() + " (ESGOTADO) ");
            } else {
                item.setLabel(cursosEvento.getCursos().getNome());
            }

            item.setValue(cursosEvento.getCursos().getCodigo());

            listarCursosI.add(item);
        }
        return listarCursosI;
    }

    public void setListarCursosI(List<SelectItem> listarCursosI) {
        this.listarCursosI = listarCursosI;
    }

    public List<SelectItem> getListarCursosII() {
        Login login = new Login();
        login = (Login) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("Login");
        Evento evento = login.getUsuarioEventoPerfil().getEvento();

        listarCursosII = new ArrayList<SelectItem>();
        SimpleDateFormat formatI = new SimpleDateFormat("dd/MM/yyyy");
        String dataI = "13/10/2010";
        Date dataCursoI = null;
        try {
            dataCursoI = formatI.parse(dataI);
        } catch (Exception e) {
            e.printStackTrace();
        }
        List<CursosEvento> lista = cursoDao.findALLDataCurso(dataCursoI, evento);

        for (Iterator it = lista.iterator(); it.hasNext();) {
            CursosEvento cursosEvento = (CursosEvento) it.next();
            SelectItem item = new SelectItem();
            if (cursosPessoaFisicaDao.qtdPessoaCurso(cursosEvento.getCursos().getCodigo(), dataCursoI, evento) >= cursosEvento.getCursos().getNumeroVagas()) {
                item.setDisabled(true);
                item.setLabel(cursosEvento.getCursos().getNome() + " (ESGOTADO) ");
            } else {
                item.setLabel(cursosEvento.getCursos().getNome());
            }

            item.setValue(cursosEvento.getCursos().getCodigo());

            listarCursosII.add(item);
        }
        return listarCursosII;
    }

    public void setListarCursosII(List<SelectItem> listarCursosII) {
        this.listarCursosII = listarCursosII;
    }

    public List<CursosPessoaFisica> getListaCursoPessoaFisicaI() {
        return listaCursoPessoaFisicaI;
    }

    public void setListaCursoPessoaFisicaI(List<CursosPessoaFisica> listaCursoPessoaFisicaI) {
        this.listaCursoPessoaFisicaI = listaCursoPessoaFisicaI;
    }

    public List<CursosPessoaFisica> getListaCursoPessoaFisicaII() {
        return listaCursoPessoaFisicaII;
    }

    public void setListaCursoPessoaFisicaII(List<CursosPessoaFisica> listaCursoPessoaFisicaII) {
        this.listaCursoPessoaFisicaII = listaCursoPessoaFisicaII;
    }

    public PessoaFisica getPessoaFisica() {
        return pessoaFisica;
    }

    public void setPessoaFisica(PessoaFisica pessoaFisica) {
        this.pessoaFisica = pessoaFisica;
    }

//    public String gravarCursoPessoaFisica() {
//        Imprimir imprimir = new Imprimir();
//        Etiqueta etiqueta;
//        UsuarioImpressora usuarioImpressora = new UsuarioImpressora();
//        Login login = new Login();
//        login = (Login) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("Login");
//        Evento evento = login.getUsuarioEventoPerfil().getEvento();
//        usuarioImpressora = usuarioImpressoraDao.findUsuarioImpressora(login.getUsuarioEventoPerfil().getUsuario().getCodigo());
//        String empresa = pessoaFisicaJuridicaEventoDao.findPFPJEmpresa(pessoaFisica.getCodigo());
//
//
//        cursosPessoaFisicaDao.removeAllCursosPessoaFisica(pessoaFisica, evento);
//        for (String cursosLista : listaStringI) {
//            try {
//                cursosPessoaFisica = new CursosPessoaFisica();
//                Cursos cursosI = new Cursos();
//                etiqueta = new Etiqueta();
//                cursosI = cursoDao.findByPk(Integer.valueOf(cursosLista));
//                //Integer vagasPrenchidas = cursosPessoaFisicaDao.qtdPessoaCurso(cursosI.getCodigo(), "13/10/2009");
//                Integer vagasPrenchidas = 2;
//                System.out.println("Numero de Vagas Preenchidas:" + vagasPrenchidas);
//
//                if (vagasPrenchidas >= cursosI.getNumeroVagas()) {
//                    System.out.println("Cadastro nao efetuado!!");
//                    FacesContext.getCurrentInstance().addMessage("form",
//                            new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro não permitido, todas vagas preenchidas!!!", ""));
//                } else {
//                    cursosPessoaFisica.setPessoaFisica(pessoaFisica);
//                    cursosPessoaFisica.setCursos(cursosI);
//                    cursosPessoaFisicaDao.inserir(cursosPessoaFisica);
//                    System.out.println("Cadastro efetuado com sucesso!!");
//                    etiqueta.setPessoaFisica(pessoaFisica);
//                    etiqueta.setUsuarioInclusao(login.getUsuarioEventoPerfil().getUsuario().getLogin());
//                    etiquetaDao.inserir(etiqueta);
//                    imprimir.printerS600PartCursoIEmpresa(etiqueta, usuarioImpressora.getImpressora(), empresa, cursosPessoaFisica.getCursos().getNome(), cursosPessoaFisica.getCursos().getDataCurso());
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//        for (String cursosLista : listaStringII) {
//
//            try {
//                etiqueta = new Etiqueta();
//                cursosPessoaFisica = new CursosPessoaFisica();
//                Cursos cursosII = new Cursos();
//                cursosII = cursoDao.findByPk(Integer.valueOf(cursosLista));
//
////                Integer vagasPrenchidas = cursosPessoaFisicaDao.qtdPessoaCurso(cursosII.getCodigo(), "14/10/2009");
//                Integer vagasPrenchidas = 2;
//                System.out.println("Numero de Vagas Preenchidas:" + vagasPrenchidas);
//
//                if (vagasPrenchidas >= cursosII.getNumeroVagas()) {
//                    FacesContext.getCurrentInstance().addMessage("form",
//                            new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro não permitido, todas vagas preenchidas!!!", ""));
//                } else {
//                    cursosPessoaFisica.setPessoaFisica(pessoaFisica);
//                    cursosPessoaFisica.setCursos(cursosII);
//                    cursosPessoaFisicaDao.inserir(cursosPessoaFisica);
//
//                    etiqueta.setPessoaFisica(pessoaFisica);
//                    etiqueta.setUsuarioInclusao(login.getUsuarioEventoPerfil().getUsuario().getLogin());
//                    etiquetaDao.inserir(etiqueta);
//                    imprimir.printerS600PartCursoIIEmpresa(etiqueta, usuarioImpressora.getImpressora(), empresa, cursosPessoaFisica.getCursos().getNome(), cursosPessoaFisica.getCursos().getDataCurso());
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//        return null;
//    }
    public String reimpressao() {
        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");

        Imprimir imprimir = new Imprimir();
        Etiqueta etiqueta = null;
        UsuarioImpressora usuarioImpressora = new UsuarioImpressora();
        Login login = new Login();
        login = (Login) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("Login");
        Evento evento = login.getUsuarioEventoPerfil().getEvento();
        usuarioImpressora = usuarioImpressoraDao.findUsuarioImpressora(login.getUsuarioEventoPerfil().getUsuario().getCodigo());
        String empresa = pessoaFisicaJuridicaEventoDao.findPFPJEmpresa(pessoaFisica.getCodigo());

        try {

            pessoaFisica = pessoaFisicaDao.findByPk(pessoaFisica.getCodigo());

            List<CursosPessoaFisica> cursosI = null;
            cursosI = cursosPessoaFisicaDao.findAllCursosPessoaFisica(pessoaFisica.getCodigo(), login.getUsuarioEventoPerfil().getEvento());

            if (cursosI != null && cursosI.size() > 0) {
                for (CursosPessoaFisica cursosPessoaFisicaI : cursosI) {
                    CursosEvento cursosEvento = cursoDao.getCursoEvento(cursosPessoaFisicaI.getCursosEvento().getCursos().getCodigo(), evento);
                    etiqueta = new Etiqueta();
                    etiqueta.setPessoaFisica(pessoaFisica);
                    etiqueta.setUsuarioInclusao(login.getUsuarioEventoPerfil().getUsuario().getLogin());
                    System.out.println("Imprimir curso");
                    imprimir.printerS600PartCursoIEmpresa(etiqueta, usuarioImpressora.getImpressora(), "", cursosPessoaFisicaI.getCursosEvento().getCursos().getNome(), cursosEvento.getData());
                }
            }

        } catch (Exception e) {
        }


        return null;
    }

    public String pesquisarCursoPessoaFisica() {
        System.out.println("dadasd");
        pessoaFisica = pessoaFisicaDao.findByPk(codigoPessoaFisica);
        System.out.println("Nome Curso Pessoa:" + pessoaFisica.getNome());
        SimpleDateFormat formatI = new SimpleDateFormat("dd/MM/yyyy");
        SimpleDateFormat formatII = new SimpleDateFormat("dd/MM/yyyy");
        String dataI = "12/10/2010";
        String dataII = "13/10/2010";
        Date dataCursoI = null;
        Date dataCursoII = null;
        try {
            dataCursoI = formatI.parse(dataI);
            dataCursoII = formatI.parse(dataII);
        } catch (Exception e) {
            e.printStackTrace();
        }
        listaCursoPessoaFisicaI = cursosPessoaFisicaDao.findAllCursoPFData(dataCursoI, pessoaFisica.getCodigo());
        listaCursoPessoaFisicaII = cursosPessoaFisicaDao.findAllCursoPFData(dataCursoII, pessoaFisica.getCodigo());
        for (CursosPessoaFisica cursoPF : listaCursoPessoaFisicaI) {
            System.out.println("Codigo Curso:" + cursoPF.getCursosEvento().getCursos().getCodigo());
            System.out.println("Nome PF:" + cursoPF.getPessoaFisica().getNome());
        }

        for (CursosPessoaFisica cursoPF : listaCursoPessoaFisicaII) {
            System.out.println("Codigo Curso:" + cursoPF.getCursosEvento().getCursos().getCodigo());
            System.out.println("Nome PF:" + cursoPF.getPessoaFisica().getNome());
        }

        listaStringI = new String[listaCursoPessoaFisicaI.size()];
        for (int i = 0; i < listaCursoPessoaFisicaI.size(); i++) {
            System.out.println("Lista 1:" + listaCursoPessoaFisicaI.get(i).getCursosEvento().getCursos().getCodigo().toString());
            listaStringI[i] = listaCursoPessoaFisicaI.get(i).getCursosEvento().getCursos().getCodigo().toString();
        }

        listaStringII = new String[listaCursoPessoaFisicaII.size()];
        for (int j = 0; j < listaCursoPessoaFisicaII.size(); j++) {
            System.out.println("Lista 2:" + listaCursoPessoaFisicaII.get(j).getCursosEvento().getCursos().getCodigo().toString());
            listaStringII[j] = listaCursoPessoaFisicaII.get(j).getCursosEvento().getCursos().getCodigo().toString();
        }
        return null;
    }

    public String gravarCurso() {
        if (cursos.getCodigo() == null) {
            cursoDao.inserir(cursos);
            cursos = new Cursos();
            FacesContext.getCurrentInstance().addMessage("form", new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastrado Com Sucesso!", ""));
        } else {
            cursoDao.altera(cursos);
        }
        return null;
    }

    public String removerCurso() {
        cursoDao.remove(cursos.getCodigo());
        return null;
    }

    public String visualizarCurso() {
        cursos = cursoDao.findByPk(cursos.getCodigo());
        return null;
    }

    /**
     * @return the cursosEventoList
     */
    public List<CursosEvento> getCursosEventoList() {
        Login login = new Login();
        login = (Login) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("Login");
        Evento evento = login.getUsuarioEventoPerfil().getEvento();
        cursosEventoList = cursoDao.getCursosEvento(evento);
        return cursosEventoList;
    }

    /**
     * @param cursosEventoList the cursosEventoList to set
     */
    public void setCursosEventoList(List<CursosEvento> cursosEventoList) {
        this.cursosEventoList = cursosEventoList;
    }

    /**
     * @return the cursosEvento
     */
    public CursosEvento getCursosEvento() {
        return cursosEvento;
    }

    /**
     * @param cursosEvento the cursosEvento to set
     */
    public void setCursosEvento(CursosEvento cursosEvento) {
        this.cursosEvento = cursosEvento;
    }
    
    public String gravarAlterar(){
        cursoDao.alteraCursosEvento(cursosEvento);
        FacesContext.getCurrentInstance().addMessage("form", new FacesMessage(FacesMessage.SEVERITY_INFO, "Curso alterado !", ""));
       
        return "cursosEventoConsulta";
    }
}
